// 父类构造函数
function Parent(name) {
  this.name = name // 实例属性
  this.colors = ['red'] // 引用类型属性
}

// 父类原型方法
Parent.prototype.sayName = function () {
  console.log(this.name)
}
Parent.prototype.a = 'a'

// 子类构造函数
function Child(name, age) {
  // 1. 构造函数继承：复制父类的实例属性到子类实例
  Parent.call(this, name) // 关键步骤：绑定 this 到子类实例
  this.age = age // 子类自有属性
}

// 2. 原型链继承：继承父类原型上的方法
Child.prototype = new Parent() // 关键步骤：创建父类实例作为子类原型
Child.prototype.constructor = Child // 修复 constructor 属性

// 子类原型方法
Child.prototype.sayAge = function () {
  console.log(this.age)
}

// 测试
const child1 = new Child('Alice', 30)
const child2 = new Child('Bob', 25)

child1.colors.push('blue')

child1.colors.push = '2'
console.log(child2.colors)
